\appendix
\clearemptydoublepages
\chapter{Installation de Xenomai}
\paragraph{}
Afin de pouvoir effectuer ce projet, il a fallu commencer par installer Xenomai.
Dans le but de faciliter l'installation aux éventuels futurs utilisateurs, la
démarche d'installation exhaustive est expliquée dans cette annexe.\\
La documentation de base a été trouvée sur le site de
Xenomai \cite{SiteXenomai:website} rubrique \flqq HowTos/Xenomai Quick build guidee\flqq et a été
modifiée et simplifiée pour la distribution Ubuntu.


\section{Version utilisée}
L'installation a été réalisée sur la distribution Ubuntu Intrepid 8.10.\\

La version de Xenomai utilisée est la dernière stable à ce jour (25 mars 2009) : 2.4.7.\\
Le noyau de Linux utilisé est la dernière version supportée par Xenomai 2.4.7 : 2.6.28.7.\\

Afin de simplifier les procédure, toutes les opérations ont été effectuées avec les droits
\textit{root}. Il est possible d'utiliser Xenomai en mode utilisateur standard. Pour ce faire une
explication est disponible sur le site de Xenomai dans la section \flqq Howtos\frqq puis \flqq
Xenomai Quick build guide\frqq.

\section{Procédure d'installation}
\subsection{Préparation du noyau}
\paragraph{}
Avant toute chose, il faut évidemment commencer par se procurer les sources de Xenomai. De même que
ceux du noyau Linux \flqq vanilla\frqq, disponible sur le site kernel.org.\\
Noyau vanilla car les sources inclus dans la distribution ont certainement subi des
modifications qui pourraient empêcher le bon fonctionnement de Xenomai. Si vous êtes l'heureux(se)
possesseur d'un CD ou DVD du projet, ces sources sont déjà présentes dans le dossier sources.
\paragraph{}
Après avoir décompressé les 2 archives (par défaut dans /usr/src) nous allons commencer par patcher
Xenomai avec le patch du projet : 
\begin{FramedBoxOval}
   cd /usr/src
	 patch -p0 < ote.patch
\end{FramedBoxOval}
Il faut
ensuite exécuter le script prepare-kernel.sh se trouvant dans le dossier scripts de
xenomai. 
\begin{FramedBoxOval}
   ./xenomai-2.4.7/scripts/prepare-kernel.sh
\end{FramedBoxOval}
Une invite vous demandera qu'elle est le chemin des sources Linux.
Entrez le chemin du dossier des sources par exemple /usr/src/linux-2.6.28.7 dans
notre cas. Ce script va automatiquement patcher le noyau Linux avec Adeos et
installer le noyau temps réel de Xenomai.
\paragraph{}
Maintenant, afin de pouvoir utiliser la fonction \textit{vprintk} patcher le noyau linux avec le
patch vprintk.patch :
\begin{FramedBoxOval}
   patch -p0 < vprintk.patch
\end{FramedBoxOval}
\subsection{Compilation du noyau}
\paragraph{}
Pour compiler le noyau, il est nécessaire de le configurer. Vous pouvez alors le
configurer depuis zéro (recommandé pour un système minimal, mais il faut pour
cela connaitre exactement le matériel et les pilotes à utiliser).
\paragraph{}
La deuxième solution est de reprendre la configuration précédente (configuration
générique créée par Ubuntu dans notre cas) et de, au besoin, supprimer les
pilotes et options inutiles. Pour cela, copiez le fichier de configuration du dossier /boot d'un
de vos noyaux existant dans le dossier des sources Linux. Dans notre cas : 
\begin{FramedBoxOval}
   cp /boot/config-2.6.27-11-generic  /usr/src/linux-2.6.28.7/.config
\end{FramedBoxOval}
\paragraph{}

Ouvrez ensuite le répertoire contenant les sources, dans notre cas /usr/src/linux-2.6.28.7/ :
\begin{FramedBoxOval}
   cd /usr/src/linux-2.6.28.7/
\end{FramedBoxOval}

Vous pouvez maintenant éditer la configuration du noyau grâce à la commande :
\begin{FramedBoxOval}
make menuconfig \#interface texte
\end{FramedBoxOval}
ou :
\begin{FramedBoxOval}
make xconfig \#Interface en QT
\end{FramedBoxOval}
ou encore :
\begin{FramedBoxOval}
make gconfig \#Interface en GTK
\end{FramedBoxOval}
Les 2 derniers utilitaires possède nécessitent un
serveur X et QT et/ou GTK installé.
\paragraph{}
Choisissez, par exemple, votre type de processeur et les options temps réel
souhaitées. Il est recommandé de désactiver la gestion d'énergie de Linux qui peut poser des
problème au noyau Xenomai. Dans le menu entrez dans \flqq Power management and ACPI options\frqq
puis désactivez toutes les options s'y trouvant.\\
OTE est proposé en option dans le menu de configuration. Pour l'activer, ouvrez le menu
\flqq Real-time sub-system\frqq puis \flqq Timing\frqq après quoi il faut activer l'option
\flqq Enable periodic timing\frqq et enfin activer l'option \flqq Enable OTE power consumption
reduction\frqq.
\paragraph{}
\label{debug}
Pour pouvoir obtenir les informations de debuggage, il est nécessaire d'activer l'option
\flqq Enable debugging features for OTE\frqq.
\paragraph{}
Il est maintenant possible de compiler le noyau. Ubuntu possède un outil qui
permet de compiler le noyau  sous forme de paquet \textit{deb}. Ceci permettra de
gérer plus facilement les noyaux (installation, désinstallation) et d'épargner
la modification manuelle de la liste des noyaux du boot manager (grub pour
Ubuntu).\\
Commencez par installer cet outil :
\begin{FramedBoxOval}
sudo apt-get install kernel-package
\end{FramedBoxOval}
Si vous désirez effacer tous les fichiers créés par une précédente compilation : 
\begin{FramedBoxOval}
sudo make-kpkg clean
\end{FramedBoxOval}

Pour compiler le noyau :
\begin{FramedBoxOval}
sudo make-kpkg --initrd kernel\_image kernel\_headers
\end{FramedBoxOval}

Une fois le noyau et les fichiers d'en-têtes prêts, il ne reste plus qu'à les
installer :
\begin{FramedBoxOval}
dpkg -i linux-image-2.6.28.7-xenomai-2.4.7-10.00.Custom\_i386.deb linux-headers-2.6.28.7-xenomai-2.4.7-10.00.Custom\_i386.deb
\end{FramedBoxOval}

Vérifier maintenant si la liste des noyau de démarrage a bien été mise à jour :
\begin{FramedBoxOval}
	sudo nano /boot/grub/menu.lst
\end{FramedBoxOval}

Si vous voyez votre noyau vous avez alors fini l'installation du noyau et pouvez redémarrez.\\
Sinon, ajoutez une nouvelle entrée pour votre noyau par exemple :
\begin{FramedBoxOval}
title		Ubuntu 8.10, kernel Linux-2.6.28.7  xenomai-2.4.7
uuid		375c6b96-2da5-4a20-8adc-7671c1f8d7fb
kernel	/boot/vmlinuz-2.6.28.7-xenomai-2.4.7  root=UUID=375c6b936-2da2-4a20-8ada-7671c1f8d7fb ro
quiet  
initrd		/boot/initrd.img-2.6.28.7-xenomai-2.4.7
quiet
\end{FramedBoxOval}
Et redémarrer.

\paragraph{}
Dans l'objectif de réinstaller un noyau fraichement compilé, avant d'installer
ce dernier, il faut supprimer l'ancien noyau.\\

Pour connaitre le nom du paquet à supprimer utilisez par exemple :
\begin{FramedBoxOval}
dpkg -l | grep xenomai-2.4.7
\end{FramedBoxOval}

Puis pour le supprimer :
\begin{FramedBoxOval}
 dpkg -r linux-headers-2.6.28.7-xenomai-2.4.7 linux-image-2.6.28.7-xenomai-2.4.7
\end{FramedBoxOval}

\subsection{Installation de Xenomai}
Une fois le noyau compilé et installé, il est nécessaire d'installer l'API de Xenomai pour que
l'utilisateur puisse accéder facilement au fonctions offertes, sans devoir créer lui même des
appels systèmes.\\

Pour ce faire, allez dans le répertoire contenant les sources de Xenomai, ici
/usr/src/xenomai-2.4.7 :
\begin{FramedBoxOval}
 cd /usr/src/xenomai-2.4.7
\end{FramedBoxOval}

Configurez puis installez Xenomai :
\begin{FramedBoxOval}
 ./configure
 make
 sudo make install
\end{FramedBoxOval}

Il faut encore créer le fichier de configuration pour la bibliothèque de Xenomai en utilisant par
exemple l'éditeur de texte nano:
\begin{FramedBoxOval}
  sudo cp /etc/ld.so.conf.d/libc.conf /etc/ld.so.conf.d/xenomai.conf
  sudo nano /etc/ld.so.conf.d/xenomai.conf
\end{FramedBoxOval}

Puis ajoutezr dans ce fichier :
\begin{FramedBoxOval}
  \# xenomai libs
  /usr/xenomai/lib
\end{FramedBoxOval}

Finalement mettez à jour les liens des bibliothèques
\begin{FramedBoxOval}
  sudo ldconfig
\end{FramedBoxOval}

\section{Utilisation d'OTE}
\paragraph{}
L'utilisation de Xenomai avec OTE ne change en rien de son utilisation standard excepté la
nécessité de passer aux tâche le WCET. Ceci est effectué grâce à la méthode
\textit{int rt\_task\_wcet( RT\_TASK *task,RTIME wcet )} dans laquelle l'argument task est la tâche
temps réel et wcet le WCET. Il est nécessaire d'appeler cette fonction avant de démarrer la tâche.
\paragraph{}
Pour les autres fonction, vous pouvez vous référez à l'API de Xenomai disponible dans les sources ou
sur leur site \cite{SiteXenomai:website}. De plus, vous trouverez, en annexe, un programme
d'exemple trivial permettant de créer des tâches périodiques avec OTE \ref{ProgExemple}.
\paragraph{}
Il est important de rappeler qu'OTE ne peut être utilisé
que dans un contexte uniquement périodique car il serait impossible d'imaginer étendre une tâche et
qu'une nouvelle tâche non périodique la préempte. En réalité les tâches non périodiques ne peuvent
être utilisées dans un contexte périodique avec échéance uniquement si elles possèdent une priorité
plus basse que toutes les tâches périodiques. Dans le cas contraire, il ne serait plus
possible d'assurer les échéances des tâches périodiques. En effet, une tâche à priorité plus
faible que toutes les tâches périodiques, comme la tâche \textit{root}(exécutant Linux) de Xenomai,
ne dérangent en rien puisqu'elles ne risquent pas de déranger les tâches périodiques.







